package com.summer.proxy2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyTest {
    public static void main(String[] args) {
        //1.使用jdk动态代理模式进行代理
        //参数说明:loader：负责将代理对象的class文件加载到内存中的类加载器，一般使用被代理类的类加载器即可
        //Interfaces.class：被代理类实现的接口数组
        //InvocationHandler:增强的业务逻辑
        Tank tank = new Tank();
        //jdk1.8
        System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles","true");
        //jdk11
//        System.getProperties().put("jdk.proxy.ProxyGenerator.saveGeneratedFiles","true");
        Moveable proxy = (Moveable)Proxy.newProxyInstance(Tank.class.getClassLoader(), new Class[]{Moveable.class}, new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("移动开始.....");
//                method.getName();
                Object result = method.invoke(tank, args);
                System.out.println("移动结束.....");
                return result;
            }
        });

        proxy.move();
        // 引申出的问题，我们调用move()方法，怎么调用了invoke()方法，所以需要去学习一下生成的代理类的.class文件


    }

}
